/*
 * @Author       : ljkt
 * @Version      : 1.0
 * @Date         : 2021-10-08 09:29:52
 * @LastEditors: ljkt
 * @LastEditTime: 2025-06-22 13:31:10
 * @Description  :
 */

#include "./Common_Include.h"

Ram s_app_menu_t gApp_Menu;
Ram uint key_value;		  // 所有按键值
Ram uint key_value_lvxin; // 滤芯按键值

/**
 * @brief 初始化菜单应用程序
 *
 * 该函数用于初始化菜单应用程序。通过调用memset函数，将全局变量gApp_Menu的所有字节设置为0，从而实现初始化。
 */
void App_Menu_Init(void)
{
	// 使用memset函数将gApp_Menu结构体的所有字节设置为0，实现初始化
	memset(&gApp_Menu, 0, sizeof(gApp_Menu));
}
/**
 * @brief 进入下一个模式
 *
 * 该函数用于进入下一个模式。它会打印当前退出的模式，并更新全局变量gApp_Menu的Step成员为新的模式。
 *
 * @param mode 要进入的模式
 * @param line 当前行号
 */
void Go_Next_Mode(unsigned char mode, unsigned long line)
{
	// 打印当前退出的模式和行号
	Dev_IoPrint_Str_DecStr("exit mode :", line);
	// 更新全局变量gApp_Menu的Step成员为新的模式
	gApp_Menu.Step = mode;
}
/**
 * @brief 同步子模式的计时器
 *
 * 该函数用于同步子模式的计时器。它会更新全局变量gApp_Menu的Child成员的TimeDelay和TimeOut成员为当前时间。
 */
void Sync_Child_Time(void)
{
	// 更新全局变量gApp_Menu的Child成员的TimeDelay成员为当前时间
	gApp_Menu.Child.TimeDelay = Drv_Get_Tick_u32();
	// 更新全局变量gApp_Menu的Child成员的TimeOut成员为当前时间
	gApp_Menu.Child.TimeOut = Drv_Get_Tick_u32();
}
/**
 * @brief 初始化菜单参数
 *
 * 该函数用于初始化菜单参数。具体实现需要根据实际需求进行补充。
 */
void MenuParamInit(void)
{
	// 第一级参数初始化
	// 如果当前步骤与上一次步骤不同
	if (gApp_Menu.StepLast != gApp_Menu.Step)
	{
		// 重置子状态
		memset(&gApp_Menu.Child, 0, sizeof(gApp_Menu.Child));
		// 更新上一次步骤为当前步骤
		gApp_Menu.StepLast = gApp_Menu.Step;
		// 同步子模式的计时器
		Sync_Child_Time();
	}
	// 第二级参数初始化
	// 如果子步骤与上一次子步骤不同
	if (gApp_Menu.Child.StepLast != gApp_Menu.Child.Step)
	{
		// 更新上一次子步骤为当前子步骤
		gApp_Menu.Child.StepLast = gApp_Menu.Child.Step;
		// 同步子模式的计时器
		Sync_Child_Time();
	}
}

/**
 * @brief 处理待机模式下的菜单操作
 *
 * 该函数用于处理待机模式下的菜单操作。具体实现需要根据实际需求进行补充。
 *
 * @param key 按键类型
 */
void App_Menu_Standy(void)
{
	// 获取按键类型
	key_value = (keys_flag << 3) | ((uchar)key_value_anjian);
	// s_dev_key_cv_t *key = Dev_Key_Get(REF_KEY_CLR);
	// // 按键值处理 DXY
	// switch (gApp_Menu.Child.Step)
	// {
	// // 长按滤芯按键，按键值获取,以及把功能按键值合并
	// case 0:
	// {
	// 	if (Read_Key(key, e_KEY_DOWN, key_lvxin1))
	// 	{
	// 		key_value_lvxin=key1;
	// 	}
	// 	else if(Read_Key(key, e_KEY_DOWN, key_lvxin2))
	// 	{
	// 		key_value_lvxin=key2;

	// 	}
	// 	else if(Read_Key(key, e_KEY_DOWN, key_lvxin3))
	// 	{
	// 		key_value_lvxin=key3;
	// 	}
	// 	key_value=key_value_lvxin | key_value_anjian;
	// }
	// 	break;
	// // 其他子步骤时，重置子步骤为0
	// default:
	// 	gApp_Menu.Child.Step = 0;
	// 	break;
	// }
}

/**
 * @brief 扫描菜单操作
 *
 * 该函数用于扫描菜单操作。它会定期检查是否需要初始化菜单参数，并根据当前步骤执行相应的操作。
 */
void App_Menu_Scan(void)
{
	// 定义一个静态变量tick，用于记录时间
	static Ram unsigned char tick = 0;
	// 如果经过了指定的时间间隔
	if (Drv_Autoload_Ntick_u8(&tick, APP_MENU_TIME))
	{
		// 初始化菜单参数
		MenuParamInit();
		// 根据当前步骤执行相应的操作
		switch (gApp_Menu.Step)
		{
		// 如果当前步骤是待机模式
		case e_INDEX_MENU_STANDY:
			// 处理待机模式下的菜单操作
			App_Menu_Standy();
			break;
		// 如果当前步骤是其他模式
		default:
			// 将当前步骤重置为0
			gApp_Menu.Step = 0;
			break;
		}
	}
}
